2 #ifndef FRAMELIB_FIXEDPOINT_H 3 #define FRAMELIB_FIXEDPOINT_H 20 FL_SP(uint64_t a, uint64_t b, uint64_t c) : mInt(a), mFracHi(b), mFracLo(c) {}
24 uint64_t
intVal()
const {
return mInt; }
54 FL_FP() : mInt(0U), mFrac(0U) {}
55 FL_FP(uint64_t a, uint64_t b) : mInt(a), mFrac(b) {}
57 FL_FP(
const double& val);
70 friend bool operator == (
const FL_FP& a,
const FL_FP& b) {
return (a.mInt == b.mInt & a.mFrac == b.mFrac); }
72 friend bool operator < (
const FL_FP& a,
const FL_FP& b) {
return ((a.mInt < b.mInt) | (a.mInt == b.mInt & a.mFrac < b.mFrac)); }
73 friend bool operator > (
const FL_FP& a,
const FL_FP& b) {
return ((a.mInt > b.mInt) | (a.mInt == b.mInt & a.mFrac > b.mFrac)); }
74 friend bool operator <= (
const FL_FP& a,
const FL_FP& b) {
return !(a > b); }
75 friend bool operator >= (
const FL_FP& a,
const FL_FP& b) {
return !(a < b); }
79 friend bool operator ! (
const FL_FP& b) {
return !b.mInt && !b.mFrac; }
118 if (++mFrac == uint64_t(0U))
126 FL_FP& result = *
this;
133 if (mFrac-- == uint64_t(0U))
141 FL_FP& result = *
this;
150 operator double()
const {
return ((
double) mInt) + ((double) mFrac / 18446744073709551616.0); }
160 friend bool operator == (
const FL_FP& a,
const double& b) {
return a ==
FL_FP(b); }
161 friend bool operator == (
const double& a,
const FL_FP& b) {
return FL_FP(a) == b; }
163 friend bool operator < (
const FL_FP& a,
const double& b) {
return a <
FL_FP(b); }
164 friend bool operator < (
const double& a,
const FL_FP& b) {
return FL_FP(a) < b; }
165 friend bool operator > (
const FL_FP& a,
const double& b) {
return a >
FL_FP(b); }
166 friend bool operator > (
const double& a,
const FL_FP& b) {
return FL_FP(a) > b; }
167 friend bool operator <= (
const FL_FP& a,
const double& b) {
return a <=
FL_FP(b); }
168 friend bool operator <= (
const double& a,
const FL_FP& b) {
return FL_FP(a) <= b; }
169 friend bool operator >= (
const FL_FP& a,
const double& b) {
return a >=
FL_FP(b); }
170 friend bool operator >= (
const double& a,
const FL_FP& b) {
return FL_FP(a) >= b; }
185 FL_FP& operator += (
const double& b) {
return operator +=(
FL_FP(b)); }
186 FL_FP& operator -= (
const double& b) {
return operator -=(
FL_FP(b)); }
187 FL_FP& operator *= (
const double& b) {
return operator *=(
FL_FP(b)); }
188 FL_FP& operator /= (
const double& b) {
return operator /=(
FL_FP(b)); }
204 static T
smallest() {
return std::numeric_limits<T>::epsilon() * 65536.0; }
208 if (std::numeric_limits<T>::has_infinity)
209 return std::numeric_limits<T>::infinity();
211 return std::numeric_limits<T>::max();
218 static FL_FP largest() {
return FL_FP(std::numeric_limits<uint64_t>::max(), std::numeric_limits<uint64_t>::max()); }
friend bool nonZeroPositive(const FL_FP &a)
Definition: FrameLib_FixedPoint.h:66
uint64_t fracLoVal() const
Definition: FrameLib_FixedPoint.h:26
static T largest()
Definition: FrameLib_FixedPoint.h:206
uint64_t fracHiVal() const
Definition: FrameLib_FixedPoint.h:25
FL_SP(uint64_t a, uint64_t b, uint64_t c)
Definition: FrameLib_FixedPoint.h:20
static T smallest()
Definition: FrameLib_FixedPoint.h:204
friend FL_SP operator*(const FL_SP &a, const FL_SP &b)
Definition: FrameLib_FixedPoint.cpp:126
Definition: FrameLib_FixedPoint.h:200
FL_FP operator/(const FL_FP &a, const FL_FP &b)
Definition: FrameLib_FixedPoint.cpp:384
uint64_t intVal()
Definition: FrameLib_FixedPoint.h:61
Definition: FrameLib_FixedPoint.h:47
FL_FP operator-(const FL_FP &a, const FL_FP &b)
Definition: FrameLib_FixedPoint.cpp:304
friend FL_SP twoMinus(const FL_SP &b)
Definition: FrameLib_FixedPoint.cpp:251
double nonZeroPositive(double &a)
Definition: FrameLib_FixedPoint.h:223
Definition: FrameLib_FixedPoint.h:15
FL_SP()
Definition: FrameLib_FixedPoint.h:19
static FL_FP largest()
Definition: FrameLib_FixedPoint.h:218
uint64_t fracVal()
Definition: FrameLib_FixedPoint.h:62
static FL_FP smallest()
Definition: FrameLib_FixedPoint.h:217
friend FL_SP qMul(const FL_SP &a, const uint64_t &intVal, const uint64_t &fracVal)
Definition: FrameLib_FixedPoint.cpp:31
uint64_t intVal() const
Definition: FrameLib_FixedPoint.h:24
FL_FP(uint64_t a, uint64_t b)
Definition: FrameLib_FixedPoint.h:55
FL_FP operator+(const FL_FP &a, const FL_FP &b)
Definition: FrameLib_FixedPoint.cpp:295
FL_FP()
Definition: FrameLib_FixedPoint.h:54